import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Biblioteka {
    private String nazawaKsiazek = "ksiazki.dat";

    // private Ksiazka [] pojemnikNaKsiazki = new Ksiazka[10];  // lepiej zrobic na listach
    private ArrayList<Ksiazka> pojemnikNaKsiazki;

    public Biblioteka() {
        pojemnikNaKsiazki = new ArrayList<Ksiazka>();
        odczytywanieDanychZPliku();
    }

    public void dodawanieNowejKsiazki() {
        Scanner scanner = new Scanner(System.in);

        try {
            System.out.println("Dodawanie newej ksiazki");
            System.out.print("Podaj autora: ");
            String autor = scanner.nextLine();
            System.out.print("Podaj tytul: ");
            String tytul = scanner.nextLine();
            System.out.print("Podaj wydawnictwo: ");
            String wydawnictwo = scanner.nextLine();
            System.out.print("Podaj rok wydania: ");
            int rokWydania = scanner.nextInt();
            System.out.print("Podaj liczbe stron: ");
            int liczbaStron = scanner.nextInt();

            if (rokWydania < 1000 || rokWydania > 9999)
                throw new InputMismatchException();

            Ksiazka ksiazka = new Ksiazka(autor, tytul, wydawnictwo, rokWydania, liczbaStron);
            pojemnikNaKsiazki.add(ksiazka);
            System.out.println("Pomyslnie dodano ksiazke.\n");
        } catch (InputMismatchException e) {
            System.out.println("Nie udalo sie dodac kisiazki. Podales bledne dane.\n");
        }

    }

    public void wypozyczenieKsiazki() {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Wypozyczenie ksiazki ");
        System.out.println("Podaj nazwe ksiazki: ");
        String nazwaKsiazki = scanner.nextLine();

        for (Ksiazka ksiazka : pojemnikNaKsiazki) {    // petla for dla kazdej kolekcji
            if (ksiazka.getTytul().equals(nazwaKsiazki)) {
                if (ksiazka.isCzyWypozyczona()) {
                    System.out.println("Nie mozna wypozyczyc. Ksiazka zostala juz wypozyczona\n");
                    return;
                } else {
                    ksiazka.setCzyWypozyczona(true);
                    System.out.println("Wypozyczyles ksizke " + nazwaKsiazki + "\n");
                    return;
                }
            }
        }

        System.out.println("Nie znaleziono szukanej książki\n");

    }

    public void oddawanieKsiazki() {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Oddawanie ksiazki ");
        System.out.print("Podaj nazwe ksiazki: ");
        String nazwaKsiazki = scanner.nextLine();

        for (Ksiazka ksiazka : pojemnikNaKsiazki) {    // petla for dla kazdej kolekcji
            if (ksiazka.getTytul().equals(nazwaKsiazki)) {
                if (ksiazka.isCzyWypozyczona()) {
                    ksiazka.setCzyWypozyczona(false);
                    System.out.println("Oddales ksizke " + nazwaKsiazki + "\n");
                    return;
                } else {
                    System.out.println("Nie mozna oddac ksiazki ktora mie jest wypozyczona.\n");
                    return;
                }
            }
        }

        System.out.println("Nie znaleziono szukanej książki\n");

    }

    public void pokazWszystkieKsiazki() {
        System.out.println("Lista dostepnych ksiazek:");

        for (Ksiazka ksiazka : pojemnikNaKsiazki) {
            System.out.println(ksiazka.toString());
        }

        System.out.println();
    }

    public void pokazNajgrubszaKsiazke(){
       if(pojemnikNaKsiazki.isEmpty()){
           System.out.println("Pojemnik pusty. Brak ksiazek.\n");
       }else    {
           Ksiazka najgrubszaKsiazka = pojemnikNaKsiazki.get(0);
           for(Ksiazka ksiazka : pojemnikNaKsiazki){
               if(ksiazka.getLiczbaStron() > najgrubszaKsiazka.getLiczbaStron()){
                  najgrubszaKsiazka = ksiazka;
               }
           }
           System.out.println("Najgrubsza ksiazka to " + najgrubszaKsiazka.getTytul() +
                   ", liczba stron wynosi " + najgrubszaKsiazka.getLiczbaStron() + "\n");
       }
    }

    public void zapisywaniaDanychDoPliku() {
        if (pojemnikNaKsiazki.isEmpty()) {
            System.out.println("Nie mozna zapisac ksiazek do pliku poniewaz bibloteka jest pusta.\n");
        } else {
            try {
                FileOutputStream fileoutputStream = new FileOutputStream(nazawaKsiazek);    // twprzenie file
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileoutputStream);    //  dodawanie obiektów do strumienia

                objectOutputStream.writeObject(pojemnikNaKsiazki);
                System.out.println("Pomyslnie zapisano ksiazki do pliku '" + nazawaKsiazek + "'.\n");

            } catch (Exception e) {
                System.out.println("Wystapil problem z zapisywaniem do pliku. " + e + "\n");
            }
        }
    }

    public void odczytywanieDanychZPliku() {
        try {
            FileInputStream fileInputStream = new FileInputStream(nazawaKsiazek);
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

            pojemnikNaKsiazki = (ArrayList<Ksiazka>) objectInputStream.readObject();
            Ksiazka.setLicznik(pojemnikNaKsiazki.size() + 1);
            System.out.println("Pomyslnie odczytano ksiazki z pliku '" + nazawaKsiazek + "'.\n");
        } catch (Exception e) {
            System.out.println("Wystapil blad przy odczytywaniu z pliku.\n " + e);
        }
    }

}
